<?php
/**
 * @description 通用tag标签
 * @author Xiaohui Zeng
 * @date 2019/12/1
 */

namespace app\blog\controller;


use app\model\CmsContent;
use app\model\CmsTagData; // 包含classid的关联表
use app\model\CmsTags; // 单纯tag数据表

class tag extends Base
{
    /**
     *   默认查所有的tag num降序 返回obj
     * @param $classId $tagName 二选一
     * @date 2019/12/3
     * @author Xiaohui Zeng
     */
    public function index($classid = '')
    {
        $Redis = new Redis();
        $CmsTagData = $Redis->get('CmsTag-'.$classid);
        if($CmsTagData) {
            $listObj = $CmsTagData;
            return $listObj;
        } else {
            $util = new util(); // 工具类
            if (strlen($classid)) {
                // 查当前栏目tag
                $listObj = CmsTagData::where('classid', $classid)->select();
                $ArrNew = [];
                for ($i = 0; $i < count($listObj); $i++) {
                    array_push($ArrNew, $listObj[$i]['tagid']);
                }
                $ArrNew = array_unique($ArrNew); //数组去重
                $ArrNew = array_values($ArrNew); //重置数组键值对为连续数字
                $Arr = [];
                for ($i = 0; $i < count($ArrNew); $i++) {
                    $data = CmsTags::get(['id' => $ArrNew[$i]]);
                    $tagname = $data->name;
                    $num = $data->num;
                    // 构造键值对类型数组
                    $item = [
                        "id" => $ArrNew[$i],
                        "name" => $tagname,
                        "num" => $num
                    ];
                    array_push($Arr, $item);
                }
                $Arr = $util->mymArrsort($Arr, 'num'); // 按照num调用排序方法（数组 需要排序的字段）
                $dataObjArr = [];
                $dataObjArr['total'] = count($ArrNew); // tag数量
                $dataObjArr['data'] = $Arr; // tag集合
                return $dataObjArr;
            } else {
                // 查全站tag
                $dataObjArr = CmsTags::where([])->order('num DESC')->select();
                $util->updataTagNum(); // 更新tag对应的文章数量
            }
            $Redis->save('CmsTag-'.$classid, $dataObjArr,60*60*24); // 栏目/全站tag缓存24小时
        }
        return $dataObjArr;
    }

    /**
     * 根据tagName 获取所有关联的文章
     * @param
     * @date 2019/12/3
     * @author Xiaohui Zeng
     */
    public function getAllContent($tagId = '', $page = 1, $pageSize = '')
    {
        $Redis = new Redis();
        $CmsTagData = $Redis->get('CmsTagNameList-'.$tagId.'-'.$page.'-'.$pageSize);
        if($CmsTagData) {
            $dataObjArr = $CmsTagData;
            return $dataObjArr;
        } else {
            if (strlen($pageSize)) {
                $limit = $pageSize;
            } else {
                $limit = config('apiAdmin.ADMIN_LIST_DEFAULT');
            }
            $util = new util(); // 工具类
            $listObj = CmsTagData::where('tagid',$tagId)->select(); // 所有tagid = tagid标签集合
            $ArrNew = [];
            for ($i = 0; $i < count($listObj); $i++) {
                array_push($ArrNew, $listObj[$i]['id']);
            }
            $ArrNew = array_values($ArrNew); //重置数组键值对为连续数字
            // 得到 所有符合tagid = tagid的内容id
            $Arr = [];
            for ($i = 0; $i < count($ArrNew); $i++) {
                $data = CmsContent::get(['id' => $ArrNew[$i]]);
                if(!empty($data)) {
                    // 如果$data存在
                    $data['content'] = '';
                    $util->tagName($data); // 处理tagname为数组
                    array_push($Arr, $data);
                }
            }
            $dataObjArr = [];
            $total = count($Arr);
            $dataObjArr['tagName'] = CmsTags::get($tagId)->name;
            $dataObjArr['data'] = $util->page_array($limit, $page, $Arr, 0); // 处理分页
            $dataObjArr['total'] = $total; // tag数量
            $dataObjArr['current_page'] = (int)$page; // 当前页
            $dataObjArr['per_page'] = 1; // 第一页
            $dataObjArr['last_page'] = ceil($total/$limit); // 最后一页

            $Redis->save('CmsTagNameList-'.$tagId.'-'.$page.'-'.$pageSize, $dataObjArr,60*60*24); // 根据tagName 获取所有关联的文章缓存24小时
        }
        return $dataObjArr;
    }
}